package com.imachen.ymcc.utils;

import com.alibaba.fastjson.JSON;
import com.imachen.ymcc.dto.LoginContextDto;
import com.imachen.ymcc.enums.GlobalExceptionCode;
import com.imachen.ymcc.util.AssertUtil;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;

public class LoginContextUtil {

    public static LoginContextDto getContext(){
        // 1.获取security登录上下文
        SecurityContext context = SecurityContextHolder.getContext();
        // 2.有些资源是不需要登录就访问的，那么这时候如果获取用户信息就为null，防止出现这种异常，我们先进行断言
        AssertUtil.isTrue(context.getAuthentication().isAuthenticated(), GlobalExceptionCode.USER_NO_PERMISSION_ERROR);
        // 3.获取用户信息并返回
        String loginContextJsonStr = context.getAuthentication().getName();
        return JSON.parseObject(loginContextJsonStr, LoginContextDto.class);
    }

}
